/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import modelo.Funcion;
import modelo.Perfil;

/**
 *
 * @author Cristian Perez
 */
public class PerfilesDao {
    private static PerfilesDao instance = null;

    public PerfilesDao() {
        //Instanciacion de Singleton
    }

    public static PerfilesDao getInstance() {
        if (instance == null) {
            instance = new PerfilesDao();
        }
        return instance;
    }

     public void insertar(Connection c, Perfil f) throws SQLException {
        PreparedStatement pstmt = null;
        try {
            String query = "INSERT INTO Perfiles (nombre) VALUES (?)";
            pstmt = c.prepareStatement(query);
            pstmt.setString(1, f.getNombre().toUpperCase().trim());
            pstmt.execute();
        }catch(Exception e) {e.printStackTrace();}
        finally {
            try {pstmt.close();} catch(Exception ee) {}
        }
    }

      public void eliminar(Connection c, Perfil per) throws SQLException {
        Statement stmt = null;
        try {
        String query = "DELETE FROM perfiles WHERE idPerfil='"+per.getCod()+"'";
        stmt = c.createStatement();
        stmt.execute(query);
        }catch(Exception e) {e.printStackTrace();}
        finally {
            try {stmt.close();} catch(Exception ee) {}
        }
    }

    public ArrayList getTodos (Connection c) throws SQLException {
        //Creo la variable lista donde la consulta me va a devolver los registros
        ArrayList lista = new ArrayList();
        Statement stmtConsulta = null;

        //Creo la consulta
            String laConsulta = "SELECT * FROM perfiles Where idPerfil <> 1";
            //Creo la sentencia
            stmtConsulta = c.createStatement();
            //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
            ResultSet rs = stmtConsulta.executeQuery(laConsulta);

            //Cargo la lista
            while (rs.next()) {
                Perfil perfAux = new Perfil(rs.getInt("idPerfil"),rs.getString("nombre"));
                lista.add(perfAux);
            }
            //Retorno la lista
            return lista;
    }

    public boolean verificarExistenciaPerfil (Connection c, int codPerfil) throws SQLException {
        Statement stmtConsulta = null;

        //Pido todos los usuarios que esten asociados al perfil "codPerfil"
        String laConsulta = "SELECT * FROM usuarios WHERE idperfil='"+codPerfil+"'";
        //Creo la sentencia
        stmtConsulta = c.createStatement();
        //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
        ResultSet rs = stmtConsulta.executeQuery(laConsulta);

        if (rs.next()) {
            stmtConsulta.close();
            return true;
        }else {
            stmtConsulta.close();
            return false;
        }
    }

   

    public Perfil damePerfil(Connection conn, int idPerfil) throws SQLException {
        Statement stmtConsulta = null;

        //Pido el perfil que tenga asociados al perfil "idPerfil"
        String laConsulta = "SELECT * FROM perfiles WHERE idperfil='"+idPerfil+"'";
        //Creo la sentencia
        stmtConsulta = conn.createStatement();
            //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
        ResultSet rs = stmtConsulta.executeQuery(laConsulta);
        Perfil perfAux = null;
        if (rs.next()){        
            perfAux = new Perfil(rs.getInt("idPerfil"),rs.getString("nombre"));
        }
        return(perfAux);   
    }

    public void LimpiarFuncionesAsignadas(Connection conn, int idPerfil) {
        PreparedStatement pstmt = null;
        try {
            String query = "DELETE FROM FuncionesDePerfiles Where idPerfil = ?";
            pstmt = conn.prepareStatement(query);
            pstmt.setInt(1, idPerfil);
            pstmt.execute();
        }catch(Exception e) {e.printStackTrace();}
        finally {
            try {pstmt.close();} catch(Exception ee) {}
        } 
    }

    public void AsignarFuncionAPerfil(Connection conn, int idPerfil, Funcion funcion) {
          PreparedStatement pstmt = null;
        try {
            String query = "INSERT INTO FuncionesDePerfiles (idPerfil,idFuncion) VALUES (?,?)";
            pstmt = conn.prepareStatement(query);
            pstmt.setInt(1, idPerfil);
            pstmt.setInt(2, funcion.getIdFuncion());
            pstmt.execute();
        }catch(Exception e) {e.printStackTrace();}
        finally {
            try {pstmt.close();} catch(Exception ee) {}
        } 
    }

}
